跳到主要内容

DCT-Mask - Discrete Cosine Transform Mask Representation for Instance Segmentation

· 阅读需 10 分钟
PuQing

论文名称:DCT-Mask: Discrete Cosine Transform Mask Representation for Instance Segmentation

作者:Xing Shen, Jirui Yang, Chunbo Wei, Bing Deng, Jianqiang Huang, Xiansheng Hua, Xiaoliang Cheng, Kewei Liang

仓库地址:https://github.com/calmevtime/DCTNet

摘要

Binary  grid  maskBinary\; grid\; mask 广泛用于实例分割。就例如 Mask RCNNMask\ R-CNN1,如下图所示,网络在 28×2828\times 28 的网格中预测 MaskMask

但是一般来说,低分辨率的网格不足以捕捉细节,而高分辨率会大大增加训练的复杂性,为解决此问题,这篇论文提出一种新的 MaskMask 表达方式,利用离散余弦变换(DCTDCT)将高分辨率的Binary  grid  maskBinary\; grid\; mask编码成一个紧凑的向量,这种方法称为 DCTMaskDCT-Mask

该方法可以非常容易集成到大多数基于像素的实例分割上。它不需要任何预处理或预训练,而且几乎对速度没有损害。

介绍

就如上图所示,Mask RCNNMask\ R-CNNGTGT 采样到 28×2828\times 28 ,然后上采样重构它,如下图所示,低分辨率的 Binary  grid  maskBinary\; grid\; mask 不足以捕获细节特征,并在上采样过程中产生偏差。

如上图为使用 DCTDCT 和未使用 DCTDCT 方法的比较,左边为 GTGT ;之后是 ResizeResize 后的 GTGT ;再是基于 ResizeResize 后的重建图;最后是重建图与原来的GTGT图的误差值。

所以就算预测 MaskMask 是正确的,重建的 MaskMask 也有一定的系统误差。解决方式之一是提高 Binary  grid  maskBinary\; grid\; mask 的分辨率,但是实验显示提高分辨率后平均精度(APAP)比 28×2828\times 28 要差,具体见下图。

Method

作者给出的方法是 DCT maskDCT\ mask ,如下图是该 DCT maskDCT\ maskpiplinepipline

该处理方式是受 JPEGJPEG 标准的启发,piplinepipline 将二进制掩码转化为紧凑的向量。首先将 GT ResizeGT\ ResizeK×KK\times K 大小,然后对其进行二维 DCTIIDCT-II (假装是罗马 2)变换,在重构时利用二维逆 DCTDCT 变换,最后利用双线性插值 ResizeResizeH×WH\times W。数学表达如下(先看离散余弦变换):

Binary  grid  mask  Mgt RH×WBinary\; grid\; mask\; M_{gt}\in\ R^{H\times W}ResizeResizeMK×K RK×KM_{K\times K}\in\ R^{K\times K}。文中K=128K=128。二维DCTDCT变换MDCT RK×KM_{DCT}\in\ R^{K\times K} 频率信号由如下公式得到:

MDCT(u,v)=2KC(u)C(v)x=0K1y=0K1MK×K(x,y)cos(2x+1)uπ2Kcos(2y+1)vπ2KM_{DCT}(u, v)=\frac{2}{K}C(u)C(v)\sum_{x=0}^{K-1} \sum_{y=0}^{K-1} M_{K \times K}(x, y) \cos \frac{(2 x+1) u \pi}{2 K} \cos \frac{(2 y+1) v \pi}{2 K}

这里 C(ω)=1/2C(\omega)=1/\sqrt{2}ω=0\omega=0 时当 ω\omega 等于其他值时 C(ω)=1C(\omega)=1

因为 DCTDCT 具有很强的能量聚集性,所以可以从 MDCTM_{DCT} 经过 zigzagzig-zag 编码后得到向量选择第一个 NN 维度的向量 V RNV\in\ R^{N} (为什么是select  the  first  Ndimensional  vector?select\; the\; first\; N-dimensional\; vector?)

之后对该向量补零重构得到 MˉDCT RK×K\bar{M}_{DCT}\in\ R^{K\times K},下一步利用二维逆 DCTDCT 变换

MˉK×K(x,y)=2Ku=0K1v=0K1C(u)C(v)MˉDCT(u,v)cos(2x+1)uπ2Kcos(2y+1)vπ2K\bar{M}_{K \times K}(x, y)=\frac{2}{K} \sum_{u=0}^{K-1} \sum_{v=0}^{K-1} C(u) C(v) \bar{M}_{D C T}(u, v) \cos \frac{(2 x+1) u \pi}{2 K} \cos \frac{(2 y+1) v \pi}{2 K}

DCT-Mask in Mask R-CNN

如上图 DCTMaskDCT-MaskMask RCNNMask\ R-CNN 的应用,在Mask  headMask\; head 中使用 4 个卷积层,提取MaskMask 特征,然后用三个线性归回层回归DCTDCT向量

则实际上变为回归问题,损失函数可构建为

Lmask=1objiND(V^i,Vi)\mathcal{L}_{mask}=1^{obj}\sum_{i}^{N}D(\hat{V}_{i},V_{i})

这里 Vi,V^iV_{i},\hat{V}_{i} 分别表示为第ii个元素的GTGT与预测值。1obj1^{obj} 是样本中正样本指示函数,DD 是第一范数距离矩阵。

如下图为对NN的取值的探究

其中NoneNone表示为使用的二进制掩码。

效果

Zig-Zag 编码

下图为ZigZagZig-Zag 编码方式

离散余弦变换 DCT

DCTDCT 变换的全称是离散余弦变换(Discrete  Cosine  TransformDiscrete\; Cosine\; Transform),主要用于将数据或图像的压缩,能够将空域的信号转换到频域上,具有良好的去相关性的性能。

在详细说明 DCTDCT 公式之前需要对 DFTDFT 有所了解。

X[k]=n=0N1x[n](cos(2πknN)jsin(2πknN))X[k] = \sum_{n=0}^{N-1}x[n] \left(cos \left( \frac{2\pi k n}{N}\right)-jsin \left( \frac{2\pi k n}{N}\right)\right)

将上面式子拆开来

X[k]=n=0N1x[n](cos2πknN)jn=0N1x[n]sin(2πknN)X[k]=\sum_{n=0}^{N-1} x[n]\left(\cos \frac{2 \pi \mathrm{kn}}{N}\right)-j \sum_{n=0}^{N-1} x[n] \sin \left(\frac{2 \pi k n}{N}\right)

可以看到 DFTDFT 变化结果,实数部分由n=0N1x[n](cos2πknN)\displaystyle\sum_{n=0}^{N-1} x[n]\left(\cos \frac{2 \pi \mathrm{kn}}{N}\right) 组成,而虚数部分由jn=0N1x[n]sin(2πknN)\displaystyle j\sum_{n=0}^{N-1} x[n] \sin \left(\frac{2 \pi k n}{N}\right)组成,设cos(2πknN)=cos(kt)\displaystyle\cos \left(\frac{2 \pi \mathrm{kn}}{N}\right)=\cos(kt),那 DFTDFT 公式可以写为:

实数部分:

Re[k]=n=0N1x[n]cos(kt)Re[k]=\sum_{n=0}^{N-1} x[n]\cos(kt)

虚数部分:

Im[k]=n=0N1x[n]sin(kt)Im[k]=\sum_{n=0}^{N-1} x[n]\sin(kt)

显然,cos\cos 是一个偶函数,sin\sin 是一个奇函数,因此

Re[k]=Re[k],Im[k]=Im[k]Re[k]=Re[-k],Im[k]=-Im[k]

所以当 x[n]x[n] 是一个实数函数时,其频率的实部是偶函数,虚部是一个奇函数。

那当原信号 x[n]x[n] 是一个全是实数的偶函数信号,x[n]sinktx[n]\sin{kt} 就变成一个奇函数,奇函数那么自然

Im[k]=n=0N1x[n]sin(kt)=0Im[k]=\sum_{n=0}^{N-1} x[n]\sin(kt)=0

因此,当原时域信号是一个实偶信号时,我们就可以把 DFTDFT 写成

X[k]=n=0N1x[n](cos2πknN)X[k]=\sum_{n=0}^{N-1} x[n]\left(\cos \frac{2 \pi \mathrm{kn}}{N}\right)

以上就是 DCTDCT 变换的核心思想,当然这与实际的 DCTDCT 公式还是有差距的。

先来看最常用的 DCTDCT 变换公式

F(u)=c(u)x=0N1f(x)cos[(x+0.5)πNu]F(u)=c(u) \sum_{x=0}^{N-1} f(x) \cos \left[\frac{(x+0.5) \pi}{N} u\right]

其中当 u=0u=0c(0)=1Nc(0)=\displaystyle\sqrt{\frac{1}{N}} 否则 c(u)=2Nc(u)=\displaystyle\sqrt{\frac{2}{N}}

可以看到与我们上面推导的内容还是有很大不一样的,这是因为在实际应用中没有刚刚好的实偶函数信号给我们,既然没有,我们就构造一个实信号。

设一长度为 NN 的实数离散信号 x[0],x[1],,x[N1]{x[0],x[1],\cdots,x[N-1]} 。首先,我们先将这个信号长度扩大成原来的两倍,并变成 2N2N ,定义新信号 x[m]x'[m]

x[m]=x[m](0mN1)x[m]=x[m1](Nm1)\begin{aligned} x'[m]=x[m](0\le m \le N-1)\\ x'[m]=x[-m-1](-N\le m\le -1) \end{aligned}

可视化一下:

其中红色为原始信号,红色为延拓后的信号,这样我们就将一个实信号变成了一个实偶信号,显然信号的区间已经变化为 [N,N1][-N,N-1]

但是这样插值之后也随之带来问题,这个信号并不关于 m=0m=0 偶对称,所以为了让信号关于原点对称,把整个延拓信号向右平移 12\frac{1}{2} 个单位

因此上面 DFTDFT 公式变化为

X[k]=m=N+12N12x[m12]ej2πmk2NX[k]=\sum_{m=-N+\frac{1}{2}}^{N-\frac{1}{2}} x^{\prime}\left[m-\frac{1}{2}\right] e^{\frac{-j 2 \pi m k}{2 N}}

根据欧拉公式对上式展开,展开时我们只要实数部分就行了

X[k]=m=N+12N12x[m12]ej2πmk2N=m=N+12N12x[m12]cos(2πmk2N)X[k]=\sum_{m=-N+\frac{1}{2}}^{N-\frac{1}{2}} x^{\prime}\left[m-\frac{1}{2}\right] e^{\frac{-j 2 \pi m k}{2 N}}=\sum_{m=-N+\frac{1}{2}}^{N-\frac{1}{2}} x^{\prime}\left[m-\frac{1}{2}\right] \cos \left(\frac{2 \pi m k}{2 N}\right)

但是这样是不科学的,因为mm是带小数甚至负数的,因为在离散信号中找不到这样的信号。因此我们需要变形,我们知道这个序列是偶对称序列,因此

m=N+12N12x[m12]cos(2πmk2N)=2×m=12N12x[m12]cos(2πmk2N)\sum_{m=-N+\frac{1}{2}}^{N-\frac{1}{2}} x^{\prime}\left[m-\frac{1}{2}\right] \cos \left(\frac{2 \pi m k}{2 N}\right)=2 \times \sum_{m=\frac{1}{2}}^{N-\frac{1}{2}} x^{\prime}\left[m-\frac{1}{2}\right] \cos \left(\frac{2 \pi m k}{2 N}\right)

于是设n=m12\displaystyle n=m-\frac{1}{2},代入上式

2×n=0N1x[n]cos(2π(n+12)k2N)=2×n=0N1x[n]cos((n+12)πkN)2 \times \sum_{n=0}^{N-1} x^{\prime}[n] \cos \left(\frac{2 \pi\left(n+\frac{1}{2}\right) k}{2 N}\right)=2 \times \sum_{n=0}^{N-1} x^{\prime}[n] \cos \left(\frac{\left(n+\frac{1}{2}\right) \pi k}{N}\right)

关于 DCTDCTc(u)c(u) 是怎么来的,c(u)c(u) 在函数计算中,加不加都无所谓,但实际上,这个值因为一些工程上的意义,在 DFTDFT 中也常常出现1N\frac{1}{N} 这主要是为了在 DFTDFT 变换变成矩阵运算的形式时,将该矩阵正交化,所以这里的c(u)c(u)也同样。c(u)=12Nc(u)=\displaystyle \sqrt{\frac{1}{2N}} 将该系数乘入上面式子

12N×2×n=0N1x[n]cos((n+12)πkN)=2N×n=0N1x[n]cos((n+12)πkN)\sqrt{\frac{1}{2 N}} \times 2 \times \sum_{n=0}^{N-1} x^{\prime}[n] \cos \left(\frac{\left(n+\frac{1}{2}\right) \pi k}{N}\right)=\sqrt{\frac{2}{N}} \times \sum_{n=0}^{N-1} x^{\prime}[n] \cos \left(\frac{\left(n+\frac{1}{2}\right) \pi k}{N}\right)

于是我们便得到 DCTDCT 式子

分析能量聚集性

上面推导了 DCTDCT 公式,这里尝试对其能量聚集性进行解释。

回想我们如何得到傅里叶变换公式,我们先对原信号进行周期延拓,而在DCTDCT中我们先对信号进行镜像延拓,如上面的图可以看出DFTDFT直接进行周期变换会造成跳变,对应与频率里的高频。而DCTDCT对信号进行镜像,其过度更加平滑,同时会弱化高频信号(高频决定细节,低频决定轮廓)。而根本原因是对一般的周期函数展开成 fourier 级数的性质问题,这里不在深入探究。

References